home *** CD-ROM | disk | FTP | other *** search
-
- ;Preferences
-
- PrefDisplayID.l=$0 ; Default (unspecified, as it may possibly retarget if they have gfx card)
- ;PrefDisplayID.l=$40120000 ; Cybervision Lores 320x240 ?Hz
- ;PrefDisplayID.l=$21000 ; AGA Lores PAL 320x256 non-laced single-scan 50Hz
- ;PrefDisplayID.l=$A1000 ; AGA Lores DoublePAL 384x275 non-laced double-scan 48Hz
- ;PrefDisplayID.l=$89000 ; AGA Lores Super72 384x290 non-laced single-scan 71Hz
- ;PrefDisplayID.l=$11000 ; AGA Lores NTSC 320x200 non-laced single-scan 60Hz
- ;PrefDisplayID.l=$39000 ; AGA Lores Multiscan 320x240 double-scan 58Hz
- ;PrefDisplayID.l=$59000 ; AGA Lores HighGFX 512x250 non-laced single-scan 54Hz
- ;PrefDisplayID.l=$69000 ; AGA Lores Euro72 320x200 non-laced double-scan 69Hz
- ;PrefDisplayID.l=$91000 ; AGA Lores DoubleNTSC 384x227 non-laced double-scan 58Hz
- ;PrefDisplayID.l=$29004 ; AGA PAL 640x400 Hires laced single-scan 50Hz
- ;PrefDisplayID.l=$19004 ; AGA NTSC 640x400 Hires laced single-scan 60Hz
- ;PrefDisplayID.l=$39024 ; AGA Multiscan 640x400 Hires non-laced single-scan 58Hz
- ;PrefDisplayID.l=$69024 ; AGA Euro72 640x400 Hires non-laced single-scan 69Hz
- ;PrefDisplayID.l=$A9004 ; AGA DoublePAL 640x400 Hires non-laced double-scan 48Hz
- ;PrefDisplayID.l=$99004 ; AGA DoubleNTSC 640x400 Hires non-laced double-scan 58Hz
- PrefDisplayWidth.w=320
- PrefDisplayHeight.w=240
- PrefDisplayBuffering.b=2 ; 1..3
- ;If Joyb(0)=0 AND Joyb(1)=0 Then Goto PrefsSkip
-
- #DTAG_DISP=$80000000
- #DTAG_DIMS=$80001000
- #DTAG_MNTR=$80002000
- #DTAG_NAME=$80003000
-
- NEWTYPE.SMode
- DID.l
- DWidth.l
- DHeight.l
- DDepth.w
- DType.w
- End NEWTYPE
-
- DEFTYPE.Hook myhook ; The hook for ASL tag as &myhook
- myhook\h_Entry=?hook
- MOVE.l a5,globalbase
- funcret.l=0
-
- Dim SMRtags.TagItem(17)
- SMRtags(0)\ti_Tag=#ASLSM_InitialLeftEdge,160
- SMRtags(1)\ti_Tag=#ASLSM_InitialTopEdge,0
- SMRtags(2)\ti_Tag=#ASLSM_InitialWidth,300
- SMRtags(3)\ti_Tag=#ASLSM_InitialHeight,600
- SMRtags(4)\ti_Tag=#ASLSM_InitialDisplayID,$21000
- SMRtags(5)\ti_Tag=#ASLSM_InitialDisplayDepth,8
- SMRtags(6)\ti_Tag=#ASLSM_InitialDisplayWidth,PrefDisplayWidth
- SMRtags(7)\ti_Tag=#ASLSM_InitialDisplayHeight,PrefDisplayHeight
- SMRtags(8)\ti_Tag=#ASLSM_InitialOverscanType,1
- SMRtags(9)\ti_Tag=#ASLSM_InitialInfoOpened,1
- SMRtags(10)\ti_Tag=#ASLSM_InitialInfoLeftEdge,350
- SMRtags(11)\ti_Tag=#ASLSM_InitialInfoTopEdge,50
- SMRtags(12)\ti_Tag=#ASLSM_DoDepth,0
- SMRtags(13)\ti_Tag=#ASLSM_DoOverscanType,1
- SMRtags(14)\ti_Tag=#ASLSM_DoWidth,1
- SMRtags(15)\ti_Tag=#ASLSM_DoHeight,1
- SMRtags(16)\ti_Tag=#ASLSM_FilterFunc,&myhook
- SMRtags(17)\ti_Tag=#TAG_DONE,0
-
- *sreq.SMode=0
- *sreq=AllocAslRequest_(2,&SMRtags(0)\ti_Tag)
- ok.b=AslRequest_(*sreq,&SMRtags(0)\ti_Tag)
-
- If ok<>0
- PrefDisplayID.l=*sreq\DID
- PrefDisplayWidth.w=*sreq\DWidth
- PrefDisplayHeight.w=*sreq\DHeight
- EndIf
- If (*sreq) Then FreeAslRequest_(*sreq)
-
- Goto PrefsSkip
-
- ;*************************************************************************
- ; This is the statement that the hook will call. Put the label before
- ; the statement you want to jump to.
- Runerrsoff
- .hook_jump:
- Statement hook{*dahook.Hook, modeID.l, *smr.ScreenModeRequester}
- ; We're inside the hook, and supposedly we should be able to do whatever
- ; we want.
- ; Filter modeID's here
- SHARED funcret.l
- DEFTYPE.DisplayInfo DisInfoBuf
- DEFTYPE.DimensionInfo DimInfoBuf
- DEFTYPE.MonitorInfo MonInfoBuf
- DEFTYPE.NameInfo NamInfoBuf
- ;Refer to Includes/Graphics/DisplayInfo.h or view newtypes
- IDhandle.l=FindDisplayInfo_(modeID)
- GetDisplayInfoData_ IDhandle,&DisInfoBuf,SizeOf.DisplayInfo,#DTAG_DISP,0
- GetDisplayInfoData_ IDhandle,&DimInfoBuf,SizeOf.DimensionInfo,#DTAG_DIMS,0
- GetDisplayInfoData_ IDhandle,&MonInfoBuf,SizeOf.MonitorInfo,#DTAG_MNTR,0
- GetDisplayInfoData_ IDhandle,&NamInfoBuf,SizeOf.NameInfo,#DTAG_NAME,0
- ;Do tests. True=Mode is valid, False=mode is invalid.
- If DimInfoBuf\MaxDepth<>8
- ;No true-colour modes, only 8-bit
- funcret=False
- Else
- funcret=True
- EndIf
- End Statement
- ;*************************************************************************
-
-
- ;*************************************************************************
- ; Hook
- Macro goto_hook
- JSR `1+6
- End Macro
-
- globalbase: Dc.l 0
-
- hook: ;This hook is called by the filter hook callback from screenmode requester, per item
- ; Store registers
- MOVEM.l d1-d7/a0-a6,-(a7) ; Not d0!
-
- ; Put parameters into dregs ready for a statement
- MOVE.l a0,d0
- MOVE.l a1,d1
- MOVE.l a2,d2
-
- ; Get global variable base
- MOVE.l globalbase,a5
-
- ; Goto hook statement
- !goto_hook{hook_jump}
-
- GetReg d0,funcret ; return accept/discard
-
- ; Restore registers
- MOVEM.l (a7)+,d1-d7/a0-a6 ; Not d0!
-
- RTS
-
- Runerrson
- PrefsSkip
- PrefDisplayHeight AND $FFFE ; Not odd, otherwise interlaced display wont do all lines
-
-